#include "hce_serial_cmd.h"

static void Printf_led_Help(void)
{
    DBG_MSG("\r\n");
    DBG_MSG("============ Led cmd ============\r\n");
    DBG_MSG("1>. led red on/off\r\n");
    DBG_MSG("2>. led green on/off\r\n");
    DBG_MSG("=================================\r\n");
}

static void Printf_sensor_Help(void)
{
    DBG_MSG("\r\n");
    DBG_MSG("============ Led cmd ============\r\n");
    DBG_MSG("1>. sensor mode jpg/movie        \r\n");
    DBG_MSG("1>. sensor iq           \r\n");
    DBG_MSG("=================================\r\n");
}

static void Printf_lcd_Help(void)
{
	DBG_MSG("\r\n");
	DBG_MSG("============ lcd cmd ============\r\n");
	DBG_MSG("1>. led screen_dir 0:L to R U to D\r\n");
    DBG_MSG("                   3:R to L D to U\r\n");
    DBG_MSG("                   5:U to D R to L\r\n");
    DBG_MSG("                   6:D to U L to R\r\n");
	DBG_MSG("=================================\r\n");
}

static void Printf_led_matrix_Help(void)
{
    DBG_MSG("\r\n");
	DBG_MSG("============ led matrix cmd ============\r\n");
	DBG_MSG("1>. led_matrix      scan\r\n");
	DBG_MSG("=================================\r\n");
}

static void reset_func(void)
{
    sys_reset();
    return;
}
static void cmd_func(void *arg)
{
    int argc = 0;
    char *argv[MAX_ARGC] = {0};
    argc = hal_serial_pasre_parm(arg, argv);
    if (argc == 1)
    {
        // Printf_led_Help();
        return;
    }
    if(strcmp(argv[1], "on") == 0)
    {
        hdl_cmd_debug_flag = TRUE;
    }
    else if(strcmp(argv[1], "off") == 0)
    {
        hdl_cmd_debug_flag = FALSE;
    }
    else
    {
        // Printf_led_Help();
    }
}
static void led_func(void *arg)
{
    int argc = 0;
    char *argv[MAX_ARGC] = {0};
    argc = hal_serial_pasre_parm(arg, argv);
    if (argc == 1)
    {
        Printf_led_Help();
        return;
    }
    if(strcmp(argv[1], "red") == 0)
    {
        if(strcmp(argv[2], "on") == 0)
        {
            // hal_led_red_onoff(ON);
        }
        else if(strcmp(argv[2], "off") == 0)
        {
            // hal_led_red_onoff(OFF);
        }
        else
            Printf_led_Help();
    }
    else if(strcmp(argv[1], "green") == 0)
    {
        if(strcmp(argv[2], "on") == 0)
        {
            // hal_led_green_onoff(ON);
        }
        else if(strcmp(argv[2], "off") == 0)
        {
            // hal_led_green_onoff(OFF);
        }
        else
            Printf_led_Help();
    }
    else
        Printf_led_Help();
}

void sensor_func(void *arg)
{
    // int argc = 0;
    // char *argv[MAX_ARGC] = {0};
    // argc = hal_serial_pasre_parm(arg, argv);
    // if (argc == 1)
    // {
    //     Printf_sensor_Help();
    //     return;
    // }
    // hdl_dcmi_stop_transmit();
    // if(strcmp(argv[1], "mode") == 0)
    // {
    //     if(strcmp(argv[2], "jpg") == 0)
    //     {
    //         DBG_MSG("send jpg data start\r\n");
    //         hdl_camera_set_mode(ov2640_work_mode_jpeg);
    //         jpeg_test();
    //     }
    //     else if(strcmp(argv[2], "movie") == 0)
    //     {
    //         DBG_MSG("send RGB start\r\n");
    //         hdl_camera_set_mode(ov2640_work_mode_rgb565);
    //         rgb565_test();
    //     }
    //     else
    //     {
    //         Printf_sensor_Help();
    //         return;
    //     }
    // }
    // else if(strcmp(argv[1], "iq") == 0)
    // {
    //     if(strcmp(argv[2], "ae") == 0)
    //     {
    //         // g_hdl_ov2640_info.ae = 
    //     }
    //     else if(strcmp(argv[2], "wb") == 0)
    //     {
    //         // g_hdl_ov2640_info.wb
    //     }
    //     else if(strcmp(argv[2], "ae") == 0)
    //     {
    //         // g_hdl_ov2640_info.ae
    //     }
    //     else if(strcmp(argv[2], "color_sat") == 0)
    //     {
    //         // g_hdl_ov2640_info.color_sat
    //     }
    //     else if(strcmp(argv[2], "bright") == 0)
    //     {
    //         // g_hdl_ov2640_info.bright
    //     }
    //     else if(strcmp(argv[2], "contrast") == 0)
    //     {
    //         g_hdl_ov2640_info.contrast = ov2640_contrast_lvl_zero;
    //     }
    //     else if(strcmp(argv[2], "specail_effect") == 0)
    //     {
    //         // g_hdl_ov2640_info.specail_effect
    //     }
    //     else if(strcmp(argv[2], "color_bar") == 0)
    //     {
    //         // g_hdl_ov2640_info.color_bar
    //     }
    //     else
    //     {
    //         Printf_sensor_Help();
    //         return;
    //     }
    //     hdl_ov2640_iq_set(&g_hdl_ov2640_info);
    // }
    // else
    // {
    //     Printf_sensor_Help();
    //     return;
    // }
    // systick_delay_ms(5);
    // hdl_dcmi_start_transmit();
}


void lcd_func(void *arg)
{
    // int argc = 0;
    // char *argv[MAX_ARGC] = {0};
    // argc = hal_serial_pasre_parm(arg, argv);
    // if (argc == 1)
    // {
    //     Printf_lcd_Help();
    //     return;
    // }
    // else if (strcmp(argv[1], "screen_dir") == 0)
    // {
    //     if(strcmp(argv[2], "0") == 0)
    //     {
    //         hdl_lcd_set_dir(DFT_SCREEN_DIR,L2R_U2D);
    //     }
    //     else if(strcmp(argv[2], "3") == 0)
    //     {
    //         hdl_lcd_set_dir(DFT_SCREEN_DIR,R2L_D2U);
    //     }
    //     else if(strcmp(argv[2], "5") == 0)
    //     {
    //         hdl_lcd_set_dir(DFT_SCREEN_DIR,U2D_R2L);
    //     }
    //     else if(strcmp(argv[2], "6") == 0)
    //     {
    //         hdl_lcd_set_dir(DFT_SCREEN_DIR,D2U_L2R);
    //     }
    //     else
    //     {
    //         Printf_lcd_Help();
    //     }
    // }
    // else
    // {
    //     Printf_lcd_Help();
    // }
    // hdl_user_lcd_darw_string(100, 200,"F",BLACK);
}

void wifi_func(void *arg)
{
    int argc = 0;
    char *argv[MAX_ARGC] = {0};
    argc = hal_serial_pasre_parm(arg, argv);
    if (argc == 1)
    {
        // Printf_lcd_Help();
        return;
    }
    if (strcmp(argv[1], "start") == 0)
    {
        // u3_printf("AT\r\n");
    }
}

void pwm_func(void *arg)
{
    int argc = 0;
    char *argv[MAX_ARGC] = {0};
    argc = hal_serial_pasre_parm(arg, argv);
    if (argc == 1)
    {
        Printf_lcd_Help();
        return;
    }
    if (strcmp(argv[1], "on") == 0)
    {
        
    }
}

uint8_t led_ls = 0;
void led_matrix_func(void *arg)
{
    int argc = 0;
    char *argv[MAX_ARGC] = {0};
    argc = hal_serial_pasre_parm(arg, argv);
    if (argc == 1)
    {
        Printf_led_matrix_Help();
        return;
    }
    if (strcmp(argv[1], "scan") == 0)
    {
        led_ls = 1;
    }
    else
    {
        led_ls = 0;
    }
}


struct _hdl_serial_str_cmp usmart_nametab[] =
{
    { "reset",          reset_func },
    { "cmd_debug",      cmd_func },
    { "led",		    led_func,	},
    { "sensor",         sensor_func,},
    { "lcd",            lcd_func,},
    { "wifi",           wifi_func,},
    { "pwm",            pwm_func,},
    { "led_matrix",     led_matrix_func,},
};

uint16_t hce_adapter_num(void)
{
	return sizeof(usmart_nametab)/sizeof(usmart_nametab[0]);
}

int hce_serial_scan(void)
{
    sys_usmart_getstring(usmart_dev.USMART_RX_BUF);
    hal_serial_str_cmp(usmart_dev.USMART_RX_BUF);
    return SUCCESS;
}

struct _hdl_usmart_dev usmart_dev =
{
	.usmart_scan = hce_serial_scan,
    .func_num    = hce_adapter_num,
	.API_Match_flag = FALSE,
};



